struct A; // 具体类型 A
struct S(A); // 具体类型 S
struct SGen<T>(T); // 泛型  SGen

// 以下函数的参数都是具体类型, 不是泛型函数
fn reg_fn(_s: S) {}
fn gen_spec_t(_s: SGen<A>) {}
fn gen_spec_i32(_s: SGen<i32>) {}

// 函数型参 <T> 为泛型 函数
fn generic<T>(_s: SGen<T>) {}

fn main() {
    println!("泛型函数");
    reg_fn(S(A));
    gen_spec_t(SGen(A));
    gen_spec_i32(SGen(6)); // 隐式指定类型参数 i32
    generic::<char>(SGen('c')); // 显式指定类型参数为 char
    generic(SGen('c')); // 隐匿指定类型参数为 char
}
